home *** CD-ROM | disk | FTP | other *** search
/ Free Software Collection: Marty 1 / FM Towns Marty 1 Free Software Collection.iso / game / s_box1 / s_box1.bas < prev    next >
BASIC Source File  |  1993-11-11  |  30KB  |  897 lines

  1. 10000 'スライドボックス タイプ1 Ver1.0 L20A '1993.4.4
  2. 10010 *COMENT
  3. 10020 '
  4. 10030 'SETX,SETY     X,Yが、長い式で表される時、始めに計算しておく。
  5. 10040 'Box(X,Y)      座標X,YのBOXの色  1<=X<=MaxX, 1<=Y<=MaxY
  6. 10050 'CBox(x,y)     complete(完成)の絵
  7. 10060 'Men           面
  8. 10070 'LastMen       面総数=最終面
  9. 10080 'Men$          面データ
  10. 10090 'Mode          モード パズル・・0,タイムトライアル・・1,面エディット・・-1
  11. 10100 'Lv            レベル Easy・・0, Normal・・1, Hard・・2
  12. 10110 'byte2         BOX1つのイメ-ジに必要な配列要素数 (int=2bytes)
  13. 10120 'GetImage      BOXのイメ-ジ格納変数
  14. 10130 'Ofset         オフセット
  15. 10140 'Q$            キー入力
  16. 10150 'ST            ステップ小さいほどウエイトが掛かる
  17. 10160 'TMP           テンポラリ変数
  18. 10170 '変数一覧
  19. 10180 'X,Y           BOXの位置
  20. 10190 'MX,MY         マウスカーソルのBOX座標
  21. 10200 'XX,YY         カ-ソルの向き
  22. 10210 'MaxX,MaxY     BOXの枠の幅
  23. 10220 'NowX,NowY     現在の空白地
  24. 10230 'NextX,NextY   次の空白地
  25. 10240 'BXY           BOXの大きさ BXY<=40,BXY=ST*n,BXY=ST*n
  26. 10250 'CBX,CBY
  27. 10260 'TX,TY         BOXのSET位置
  28. 10270 'CTX,CTY
  29. 10280 'MOVE          BOXの動く向き MOVE=1 or -1
  30. 10290 'RET           BOXを戻すか戻さないか RET=TRUE or FALSE
  31. 10300 'MUS           マウスを使用する MUS=TRUE /しない MUS=FALSE
  32. 10310 '************************ 書式 *******************************
  33. 10320      'line (x1,y1)-(x2,y2),pset,%n,bf
  34. 10330      'palette n,[G,R,B]
  35. 10340      'get@a(x1,y1)-(x2,y2),getimage,byte2*i
  36. 10350      'put@a(x1,y1)-(x2,y2),getimage,/pset,preset,or,and,xor/,,,ofset
  37. 10360 '*********************** 諸設定 ******************************
  38. 10370 '
  39. 10380 *SETTING
  40. 10390   COLOR 7,0,7,4
  41. 10400   CLS : DEFINT A-Z : SCREEN@ 0 'color 8/4096 mode...default
  42. 10410   TRUE=(1=1): FALSE=NOT TRUE:MOVE=1
  43. 10420   RANDOMIZE(TIME)
  44. 10430   BXY=40 'bxy の最大値
  45. 10440   BYTE2=INT((INT((BXY+7)/8)*BXY*4+4-1)/4)*2
  46. 10450   DIM GETIMAGE(BYTE2*16)
  47. 10460   DIM GAMEN(76800) :GOSUB *GETGAMEN
  48. 10470   DIM G(15),R(15),B(15)
  49. 10480      RESTORE *SETCOLOR
  50. 10490      FOR I=0 TO 15
  51. 10500        READ  G(I),R(I),B(I)
  52. 10510        'PALETTE I,[G(I),R(I),B(I)]
  53. 10520      NEXT I
  54. 10530   DIM BOX(20,20),CBOX(20,20)
  55. 10540   DIM HS&(1,2)
  56. 10550 '
  57. 10560  BXY=40:ST=4 'BXY=ST*X BXY<=40
  58. 10570  LASTMEN=5 :COL=0
  59. 10580   MODE=0 :LV=0:MEN=1
  60. 10590   IF NOT MODE THEN FOR I=1 TO 15:PALETTE I,0:NEXT I
  61. 10600 '******************** メインルーチン *************************
  62. 10610   GOSUB *USEMOUSE 'マウスを使用するかどうか決定
  63. 10620 IF MODE THEN F$="ptn24":GOSUB *GETTING'グラフィックパターンの読み取り
  64. 10630 *TITLE
  65. 10640   CLS 1 'text clear
  66. 10650   MEN=1:SC&=0:TOTAL=0
  67. 10660   IF MUS AND (NOT MODE) THEN MOUSE 1,,,0
  68. 10670   IF NOT MODE THEN GOSUB *MENU
  69. 10680 *MAIN
  70. 10690  IF MUS AND (NOT MODE) THEN MOUSE 1,,,0
  71. 10700  IF NOT MODE THEN GOSUB *READING  '余分なデータの読み飛ばし
  72. 10710  IF MODE=-1 THEN GOTO *EDITTING
  73. 10720   GOSUB *SHOW     '面データの読み込みと表示
  74. 10730 *START
  75. 10740    'IF MODE=1 THEN GOSUB *SHOWTIMES
  76. 10750    IF MUS THEN MOUSE 1,TX+BXY,TY+BXY,1:GOTO *MOVEBOXMOUSE
  77. 10760 *MOVEBOXKEY
  78. 10770    'FOR Y=1 TO MAXY:GOSUB *CHECKPROGRAM:NEXT Y
  79. 10780    'LOCATE 5,5:PRINT USING "NowX =## NowY =##";NOWX;NOWY
  80. 10790    'LOCATE 5,6:PRINT USING "NextX=## NextY=##";NEXTX;NEXTY
  81. 10800    GOSUB *CLEARINKEY
  82. 10810    Q$="":WHILE Q$=""
  83. 10820       Q$=INKEY$:IF MODE=1 AND MTIME$<>TIME$ THEN GOSUB *SHOWTIMES
  84. 10830    WEND
  85. 10840    GOSUB *HITKEY 'RETURN,ESC
  86. 10850    GOSUB *INKEYXY
  87. 10860    GOSUB *MOVECHECKKEY
  88. 10870    GOSUB *CLEARCHECK 'FOR Y=1 TO MAXY:GOSUB *CHECKPROGRAM:NEXT Y
  89. 10880 GOTO *MOVEBOXKEY
  90. 10890  '
  91. 10900 *MOVEBOXMOUSE
  92. 10910    'LOCATE 5,3:PRINT USING "TmpX =## TmpY =##";TMPX;TMPY
  93. 10920    'LOCATE 5,4:PRINT USING "NowX =## NowY =##";NOWX;NOWY
  94. 10930    'LOCATE 5,5:PRINT USING "NextX=## NextY=##";NEXTX;NEXTY
  95. 10940    IF MODE=1 AND MTIME$<>TIME$ THEN GOSUB *SHOWTIMES
  96. 10950    GOSUB *CLEARINKEY
  97. 10960    'GAME=TRUE    'ゲーム中
  98. 10970    GOSUB *CLICKWAIT
  99. 10980    'GAME=FALSE
  100. 10990    IF Q$<>"" THEN GOSUB *HITKEY:GOTO *MOVEBOXMOUSE 'RETURN,ESC
  101. 11000    GOSUB *MOVECHECKMOUSE
  102. 11010    GOSUB *CLEARCHECK
  103. 11020  GOTO *MOVEBOXMOUSE
  104. 11030 '
  105. 11040 *EDITTING
  106. 11050    MOUSE 0 :MOUSE 1,,,1
  107. 11060    RET=FALSE
  108. 11070    COL=1:BCOL=0
  109. 11080    TX=270:TY=50:SETX=269+BXY:SETY=49+BXY
  110. 11090    LINE(SETX,SETY)-(SETX+12*BXY+1,SETY+16*BXY+1),PSET,%15,B
  111. 11100 *EDITLOOP
  112. 11110    LOCATE 5,5:PRINT USING "Col=  &&";HEX$(COL)
  113. 11120    LOCATE 5,6:PRINT USING "MX=##### MY=#####";MX;MY
  114. 11130    IF NOT MOUSE(2,0) THEN FOR Y=1 TO 16: GOSUB *CHECKPROGRAM: NEXT Y
  115. 11140    GOSUB *CLICKWAIT ' IF NOT M THEN MUS=TRUE :GOSUB *WAITMOUSEOFF
  116. 11150    IF Q$="P" OR Q$="p" OR Q$="F" OR Q$="f" THEN GOSUB *E_PAINT
  117. 11160    IF Q$<>"" THEN GOSUB *HITKEY
  118. 11170    TMP=(MOUSE(0)-BXY/2)/BXY
  119. 11180    IF MOUSE(0)<BXY*16 AND MOUSE(1)<BXY AND COL<>TMP THEN                              BCOL=TMP :SWAP COL,BCOL
  120. 11190    IF COL=-1 THEN COL=0
  121. 11200    IF RET=TRUE THEN SWAP COL,BCOL :RET=FALSE
  122. 11210    IF MX<1 OR MY<1 THEN GOTO *EDITLOOP
  123. 11220 '
  124. 11230      SETX=BXY*MX+TX: SETY=BXY*MY+TY :OFSET=BYTE2*COL :BOX(MX,MY)=COL
  125. 11240      MOUSE 1,,,0
  126. 11250      PUT@A (SETX,SETY)-(SETX+BXY-1,SETY+BXY-1),GETIMAGE,PSET,,,,OFSET
  127. 11260      MOUSE 1,,,1
  128. 11270 GOTO *EDITLOOP
  129. 11280 '
  130. 11290 *E_PAINT
  131. 11300     FOR Y=1 TO 16
  132. 11310      FOR X=1 TO 12
  133. 11320       OFSET=BYTE2*COL:BOX(X,Y)=COL
  134. 11330       SETX=BXY*X+TX:SETY=BXY*Y+TY
  135. 11340       PUT@A(SETX,SETY)-(SETX+BXY-1,SETY+BXY-1),GETIMAGE,PSET,,,,OFSET
  136. 11350      NEXT X
  137. 11360    NEXT Y
  138. 11370 RETURN
  139. 11380 '
  140. 11390 END
  141. 11400 '*************************データ******************************
  142. 11410 '
  143. 11420 *MENDATA
  144. 11430 '012345123456789面
  145. 11440 'DATA F$,M$
  146. 11450 'DATA X,Y,STEPS,TIME
  147. 11460 'DATA 完成,未完成
  148. 11470 *EASY
  149. 11480 'Easy1面
  150. 11490 DATA "PTN32","左が完成図です"
  151. 11500 DATA 3,3,60,20
  152. 11510 DATA 3BB,BBB
  153. 11520 DATA B0B,B0B
  154. 11530 DATA BBB,BB3
  155. 11540 '2面
  156. 11550 DATA "PTN32","もう少し、練習!"
  157. 11560 DATA 3,3,30,50
  158. 11570 DATA B33,BB3
  159. 11580 DATA B03,B03
  160. 11590 DATA BB3,B33
  161. 11600 '3面
  162. 11610 DATA "PTN32","ぐるぐるまわすと・・・ほらできた!"
  163. 11620 DATA 3,3,20,30
  164. 11630 DATA 565,655
  165. 11640 DATA 606,606
  166. 11650 DATA 565,565
  167. 11660 'Easy4面
  168. 11670 DATA "PTN32","ぐるぐる・・・パ-ト2"
  169. 11680 DATA 3,3,60,30
  170. 11690 DATA 565,656
  171. 11700 DATA 606,505
  172. 11710 DATA 565,656
  173. 11720 '5面
  174. 11730 DATA "PTN32","最後だ!"
  175. 11740 DATA 4,3,160,50
  176. 11750 DATA 9999,0666
  177. 11760 DATA 0666,EEEE
  178. 11770 DATA EEEE,9999
  179. 11780 '
  180. 11790 *NORMAL
  181. 11800 '1面
  182. 11810 DATA "PTN24","いれかえ その1 簡単だよね。"
  183. 11820 DATA 4,4,90,40
  184. 11830 DATA 0EE3,EEEE
  185. 11840 DATA EEEE,E33E
  186. 11850 DATA EEEE,E30E
  187. 11860 DATA 3EE3,EEEE
  188. 11870 '2面
  189. 11880 DATA "PTN24","ぐるぐるまわしていれば・・・なんとかなりそう。"
  190. 11890 DATA 4,4,240,120
  191. 11900 DATA 0DAA,3377
  192. 11910 DATA DDAA,3377
  193. 11920 DATA 7733,AADD
  194. 11930 DATA 7733,AAD0
  195. 11940 '3面
  196. 11950 DATA "PTN24","さっきと似ているけど違うョ"
  197. 11960 DATA 4,4,210,100
  198. 11970 DATA 0DAA,7733
  199. 11980 DATA DDAA,7733
  200. 11990 DATA 7733,DDAA
  201. 12000 DATA 7733,0DAA
  202. 12010 '4面
  203. 12020 DATA "PTN24","いれかえ その2 簡単過ぎましたね?"
  204. 12030 DATA 4,4,90,100
  205. 12040 DATA 0CC3,4CC4
  206. 12050 DATA C44C,C03C
  207. 12060 DATA C44C,C33C
  208. 12070 DATA 3CC3,4CC4
  209. 12080 '5面
  210. 12090 DATA "PTN24","市松模様だ!"
  211. 12100 DATA 4,4,120,40
  212. 12110 DATA 0888,0C8C
  213. 12120 DATA 8888,C8C8
  214. 12130 DATA CCCC,8C8C
  215. 12140 DATA CCCC,C8C8
  216. 12150 '
  217. 12160 *HARD
  218. 12170 '1面
  219. 12180 DATA "PTN24","ハ-ドは、こんなもんじゃないぞ。"
  220. 12190 DATA 4,4,160,80
  221. 12200 DATA 0333,9999
  222. 12210 DATA CCCC,BBBB
  223. 12220 DATA BBBB,CCCC
  224. 12230 DATA 9999,0333
  225. 12240 '2面
  226. 12250 DATA "PTN24","いれかえ その3 でも簡単です。"
  227. 12260 DATA 4,4,160,80
  228. 12270 DATA 066F,BBBF
  229. 12280 DATA 66FB,BBF6
  230. 12290 DATA 6FBB,BF66
  231. 12300 DATA FBBB,F660
  232. 12310 '3面
  233. 12320 DATA "PTN24","この入れ替えは、難しい。"
  234. 12330 DATA 5,5,160,160
  235. 12340 DATA 37773,A777A
  236. 12350 DATA 73A37,73337
  237. 12360 DATA 7A0A7,73037
  238. 12370 DATA 73A37,73337
  239. 12380 DATA 37773,A777A
  240. 12390 '4面
  241. 12400 DATA "PTN24","市松模様、再び"
  242. 12410 DATA 4,4,90,60
  243. 12420 DATA 0C8C,0888
  244. 12430 DATA C8C8,8888
  245. 12440 DATA 8C8C,CCCC
  246. 12450 DATA C8C8,CCCC
  247. 12460 '5面
  248. 12470 DATA "PTN24","鏡の中のBOX"
  249. 12480 DATA 5,5,600,400
  250. 12490 DATA EBF6B,B6FBE
  251. 12500 DATA BF6B9,9B6FB
  252. 12510 DATA F6B9E,E9B6F
  253. 12520 DATA 6B0E2,2E0B6
  254. 12530 DATA B9E2F,F2E9B
  255. 12540 '
  256. 12550 *SETCOLOR
  257. 12560 DATA   0,  0,  0,   0,  0,127,   0,127,  0,   0,127,127
  258. 12570 DATA 127,  0,  0, 127,  0,127, 127,127,  0, 127,127,127
  259. 12580 DATA  64, 64, 64,   0,  0,255,   0,255,  0,   0,255,255
  260. 12590 DATA 255,  0,  0, 255,  0,255, 255,255,  0, 255,255,255
  261. 12600 '
  262. 12610 '**********************サブルーチン***************************
  263. 12620 '
  264. 12630 *GETGAMEN
  265. 12640  LINE(540,0)-(639,479),PSET,%8,BF
  266. 12650    SYMBOL(544,0), "Slide",1,2,%13,,,3
  267. 12660    SYMBOL(544,35)," Box",1,2,%13,,,3
  268. 12670    SYMBOL(544,74),"  TYPE I ",1,1,%13,,,3
  269. 12680    SYMBOL(544,153),"  Hi Score",1,1,%12,,,1
  270. 12690    SYMBOL(544,192),"Your Score",1,1,%14,,,1
  271. 12700    SYMBOL(544,230),"Limit",1,1,%10,,,0
  272. 12710    SYMBOL(544,303)," ESC/タイトルヘ",1,1,%11,,,1
  273. 12720  GET@A (0,0)-(639,479),GAMEN
  274. 12730  RETURN
  275. 12740 '
  276. 12750 *MENU
  277. 12760   CLS :GOSUB *FADE_OUT
  278. 12770   RESTORE *MENU
  279. 12780   FOR I=1 TO 8
  280. 12790     READ M$,C
  281. 12800     SYMBOL (I*60,80),M$,5,10,%C,,,2
  282. 12810   NEXT I
  283. 12820   DATA S,10,l,14,i,12,d,13,e,9,B,11,o,10,x,14
  284. 12830   SYMBOL (200,220),"TYPE I",3,3,%12,,,2
  285. 12840   SYMBOL (400,239),"Copyright(c) SAKE 1992-1993",1,1,%15
  286. 12850 '
  287. 12860   M1$="P/時間を気にしないパズルモード"
  288. 12870   M2$="T/時間をきそうタイムトライアル"
  289. 12880   L1$="E/やさしい":L2$="N/並み":L3$="H/難しい"
  290. 12890 '
  291. 12900  GOSUB *SETMODE :GOSUB *SETLV
  292. 12910       COLOR 3 :LOCATE 17,19:PRINT "return/ゲームスタート"
  293. 12920       COLOR 1 :LOCATE 47,19:PRINT "ESC/終了"
  294. 12930 '
  295. 12940  IF MUS THEN 
  296. 12950    TMP=TRUE:MOUSE 1,320,270,1
  297. 12960    WHILE TMP
  298. 12970      GOSUB *CLICKXY
  299. 12980      IF Q$<>"" THEN
  300. 12990        GOSUB *MENUKEY
  301. 13000      ELSE
  302. 13010        IF MY=>284 AND MY<=302 THEN
  303. 13020           IF MX=>56 AND MX<=295 THEN MODE=0
  304. 13030           IF MX=>320 AND MX<=559 THEN MODE=1
  305. 13040           GOSUB *SETMODE
  306. 13050        ELSE IF MY=>322 AND MY<=340 THEN
  307. 13060           IF MX=>176 AND MX<=255 THEN LV=0
  308. 13070           IF MX=>280 AND MX<=327 THEN LV=1
  309. 13080           IF MX=>344 AND MX<=407 THEN LV=2
  310. 13090           GOSUB *SETLV
  311. 13100        ELSE IF MY=>360 AND MY<=378 THEN
  312. 13110           IF MX=>136 AND MX<=303 THEN TMP=FALSE:BEEP
  313. 13120           IF MX=>376 AND MX<=439 THEN BEEP:COLOR 9 :LOCATE 47,19:PRINT "ESC/終了":COLOR 7:END
  314. 13130        ENDIF
  315. 13140      ENDIF
  316. 13150    WEND
  317. 13160  ELSE IF NOT MUS THEN
  318. 13170    TMP=TRUE
  319. 13180    WHILE TMP
  320. 13190      GOSUB *INKEYWAIT
  321. 13200      GOSUB *MENUKEY
  322. 13210    WEND
  323. 13220  ENDIF
  324. 13230  COLOR 11 :LOCATE 17,19:PRINT "return/ゲームスタート":COLOR 7
  325. 13240  GOSUB *FADE_IN
  326. 13250 RETURN
  327. 13260 '
  328. 13270 *MENUKEY
  329. 13280   IF Q$="P" OR Q$="p" THEN MODE=0:GOSUB *SETMODE
  330. 13290   IF Q$="T" OR Q$="t" THEN MODE=1:GOSUB *SETMODE
  331. 13300   IF Q$="E" OR Q$="e" THEN LV=0 :GOSUB *SETLV
  332. 13310   IF Q$="N" OR Q$="n" THEN LV=1 :GOSUB *SETLV
  333. 13320   IF Q$="H" OR Q$="h" THEN LV=2 :GOSUB *SETLV
  334. 13330   IF ASC(Q$)=13 THEN TMP=FALSE:BEEP
  335. 13340   IF ASC(Q$)=27 THEN BEEP:COLOR 9 :LOCATE 47,19:PRINT "ESC/終了":END
  336. 13350  RETURN
  337. 13360 '
  338. 13370 *SETMODE
  339. 13380   IF MODE=0 THEN 'Puzzule
  340. 13390     COLOR 13:LOCATE 7,15 :PRINT M1$
  341. 13400     COLOR 5 :LOCATE 40,15:PRINT M2$
  342. 13410   ELSE IF MODE=1 THEN 'TimeTrial
  343. 13420     COLOR 5 :LOCATE 7,15 :PRINT M1$
  344. 13430     COLOR 13:LOCATE 40,15:PRINT M2$
  345. 13440   ENDIF
  346. 13450 RETURN
  347. 13460 '
  348. 13470 *SETLV
  349. 13480   IF LV=0 THEN 'Easy
  350. 13490     COLOR 12:LOCATE 22,17:PRINT L1$
  351. 13500     COLOR 4 :LOCATE 35,17:PRINT L2$
  352. 13510     COLOR 4 :LOCATE 43,17:PRINT L3$
  353. 13520   ELSE IF LV=1 THEN 'Normal
  354. 13530     COLOR 4 :LOCATE 22,17:PRINT L1$
  355. 13540     COLOR 12:LOCATE 35,17:PRINT L2$
  356. 13550     COLOR 4 :LOCATE 43,17:PRINT L3$
  357. 13560   ELSE IF LV=2 THEN 'Hard
  358. 13570     COLOR 4 :LOCATE 22,17:PRINT L1$
  359. 13580     COLOR 4 :LOCATE 35,17:PRINT L2$
  360. 13590     COLOR 12:LOCATE 43,17:PRINT L3$
  361. 13600   ENDIF
  362. 13610 RETURN
  363. 13620 '
  364. 13630 *GETTING
  365. 13640    IF F$=TMP$ THEN *PUTTING
  366. 13650    IF F$<>TMP$ THEN LOAD@ F$+".tif",(0,0):TMP$=F$
  367. 13660    BXY=VAL(RIGHT$(F$,2)):TMP$=F$
  368. 13670    BYTE2=INT((INT((BXY+7)/8)*BXY*4+4-1)/4)*2
  369. 13680    FOR I=0 TO 15
  370. 13690      GET@A (BXY*I,0)-(BXY*I+BXY-1,BXY-1),GETIMAGE,BYTE2*I
  371. 13700    NEXT I
  372. 13710    RETURN
  373. 13720    '
  374. 13730  *PUTTING
  375. 13740    FOR I=0 TO 15
  376. 13750      PUT@A (BXY*I,0)-(BXY*I+BXY-1,BXY-1),GETIMAGE,PSET,,,,BYTE2*I
  377. 13760    NEXT I
  378. 13770 RETURN
  379. 13780 '
  380. 13790 *USEMOUSE
  381. 13800    LOCATE 15,11
  382. 13810    PRINT "・マウスを使う時は、クリックしてください。"
  383. 13820    LOCATE 15,13
  384. 13830    PRINT "・キーで操作する時は、何かキーを押してください。"
  385. 13840    Q$="" :M=TRUE
  386. 13850    MOUSE 0:MOUSE 1,,,0
  387. 13860    WHILE Q$="" AND M
  388. 13870      Q$=INKEY$
  389. 13880      'P=(PTRG(1)=0)
  390. 13890      M=(MOUSE(2,0)=0 AND MOUSE(2,1)=0)
  391. 13900    WEND
  392. 13910    IF NOT M THEN MUS=TRUE :GOSUB *WAITMOUSEOFF
  393. 13920    IF Q$<>"" THEN MUS=FALSE
  394. 13930   CLS
  395. 13940    IF NOT MUS THEN PRINT "You use key.":MOUSE 5
  396. 13950   RESTORE *USEMOUSE
  397. 13960    MAND$="":MDOT$=""
  398. 13970    FOR I=1 TO 32 
  399. 13980      READ N  :MAND$=MAND$+CHR$(N)
  400. 13990    NEXT I
  401. 14000    FOR I=1 TO 32
  402. 14010      READ N :MDOT$=MDOT$+CHR$(N)
  403. 14020    NEXT I
  404. 14030    '
  405. 14040    DATA &H3F,&HFF,&H1F,&HFF,&H0F,&HFF,&H07,&HFF
  406. 14050    DATA &H03,&HFF,&H01,&HFF,&H00,&HFF,&H00,&H7F
  407. 14060    DATA &H00,&H3F,&H00,&H1F,&H00,&H1F,&H00,&H7F
  408. 14070    DATA &H00,&H1F,&H00,&H1F,&H18,&H1F,&HFC,&H1F
  409. 14080    '
  410. 14090    DATA &H00,&H00,&H40,&H00,&H60,&H00,&H70,&H00
  411. 14100    DATA &H38,&H00,&H5C,&H00,&H3E,&H00,&H5F,&H00
  412. 14110    DATA &H2F,&H80,&H57,&HC0,&H2F,&H00,&H5B,&H00
  413. 14120    DATA &H25,&H80,&H42,&HC0,&H01,&HC0,&H00,&H00
  414. 14130    '
  415. 14140    IF MUS THEN PRINT "You use mouse." :MOUSE 2,MAND$,MDOT$,0,0
  416. 14150 RETURN
  417. 14160 '
  418. 14170 *READING
  419. 14180    'RESTORE *MENDATA
  420. 14190    IF LV=0 THEN RESTORE *EASY
  421. 14200    IF LV=1 THEN RESTORE *NORMAL
  422. 14210    IF LV=2 THEN RESTORE *HARD
  423. 14220    IF MEN=1 THEN RETURN
  424. 14230    FOR I=1 TO MEN-1
  425. 14240      READ F$,M$: TMP$=F$ : READ MAXX,MAXY,LIMSTEPS,LIMTIME
  426. 14250      FOR J=1 TO MAXY
  427. 14260        READ MEN$:READ MEN$
  428. 14270      NEXT J
  429. 14280    NEXT I
  430. 14290 RETURN
  431. 14300 '
  432. 14310 *SHOW
  433. 14320   CLS 1
  434. 14330   READ F$
  435. 14340    GOSUB *GETTING '前と違う時ロードし、同じ時は画面クリア
  436. 14350   COLOR ,,,0
  437. 14360   READ M$ :LOCATE 5,23 :IF MODE=0 THEN PRINT M$
  438. 14370   COLOR ,,,4
  439. 14380   READ MAXX,MAXY,LIMSTEPS,LIMTIME
  440. 14390    LEFTSTEPS=LIMSTEPS :LEFTTIME=LIMTIME+1
  441. 14400    IF MODE=1 THEN TOTAL=TOTAL-1
  442. 14410    PUT@A (0,0)-(639,479),GAMEN,PSET
  443. 14420   IF MODE=0 THEN Q$="Puzzle Mode" ELSE Q$="Time Trial"
  444. 14430   LOCATE 68,5 :PRINT Q$
  445. 14440   IF LV=0 THEN Q$="Easy" ELSE IF LV=1 THEN Q$="Normal" ELSE Q$="Hard"
  446. 14450   LOCATE 71,6 :PRINT Q$
  447. 14460   LOCATE 68,7 :PRINT USING " STAGE ###";MEN
  448. 14470   COLOR 4 :LOCATE 72,9 :PRINT USING "#######";HS&(MODE,LV)
  449. 14480   COLOR 6 :LOCATE 72,11:PRINT USING "#######";SC&
  450. 14490   COLOR 7
  451. 14500   COLOR 2:LOCATE 72,13
  452. 14510     IF MODE=0 THEN PRINT USING "/####";LIMSTEPS
  453. 14520     IF MODE=1 THEN PRINT USING "/####";LIMTIME
  454. 14530   LOCATE 74,14
  455. 14540     IF MODE=0 THEN PRINT "Steps"
  456. 14550     IF MODE=1 THEN PRINT "  Sec"
  457. 14560   TMPX=0 :NOWX=0 :TMPY=0 :NOWY=0 'For MODE=0
  458. 14570   IF MODE=0 THEN GOSUB *SHOWSTEPS
  459. 14580   IF MODE=1 THEN GOSUB *SHOWTIMES
  460. 14590   COLOR 7
  461. 14600   '画面中央付近に表示するようにする。
  462. 14610     TX=270+BXY/2            : CTX=TX-BXY*(MAXX+3)
  463. 14620     TY=(480-BXY*(MAXY+2))/2 : CTY=TY
  464. 14630   'PRINT USING " TX=### TY=### CTX=### CTY=###";TX,TY,CTX,CTY
  465. 14640    FOR Y=1 TO MAXY
  466. 14650      READ MEN$
  467. 14660      FOR X=1 TO MAXX
  468. 14670       CBOX(X,Y)=VAL("&H"+MID$(MEN$,X,1)): BOX(X,Y)=CBOX(X,Y)
  469. 14680       IF CBOX(X,Y)=0 THEN CX=X:CY=Y:NOWX=X:NOWY=Y:NEXTX=X:NEXTY=Y
  470. 14690       SETX=BXY*X+CTX: SETY=BXY*Y+CTY:OFSET=BYTE2*CBOX(X,Y)
  471. 14700       PUT@A(SETX,SETY)-(SETX+BXY-1,SETY+BXY-1),GETIMAGE,PSET,,,,OFSET
  472. 14710       SETX=BXY*X+TX  :SETY=BXY*Y+TY :OFSET=BYTE2*CBOX(X,Y)
  473. 14720       PUT@A(SETX,SETY)-(SETX+BXY-1,SETY+BXY-1),GETIMAGE,PSET,,,,OFSET
  474. 14730      NEXT X
  475. 14740      READ MEN$
  476. 14750      FOR X=1 TO MAXX
  477. 14760        IF MODE=0 THEN BOX(X,Y)=VAL("&H"+MID$(MEN$,X,1))
  478. 14770      NEXT X
  479. 14780    NEXT Y
  480. 14790    GOSUB *FADE_OUT
  481. 14800    IF MODE=0 THEN GOSUB *MODE0   'PuzzleMode
  482. 14810    IF MODE=1 THEN GOSUB *MODE1   'TimeTrialMode
  483. 14820    IF NOT MUS THEN GOSUB *WAY
  484. 14830  RETURN
  485. 14840 '
  486. 14850 *MODE0
  487. 14860 FOR Y=1 TO MAXY
  488. 14870   FOR X=1 TO MAXX
  489. 14880     IF BOX(X,Y)=0 THEN NOWX=X:NOWY=Y  :NEXTX=X:NEXTY=Y :TMPX=X:TMPY=Y
  490. 14890     SETX=BXY*X+TX  :SETY=BXY*Y+TY :OFSET=BYTE2*BOX(X,Y)
  491. 14900     PUT@A (SETX,SETY)-(SETX+BXY-1,SETY+BXY-1),GETIMAGE,PSET,,,,OFSET
  492. 14910     IF BOX(X,Y)<>CBOX(X,Y) THEN FOR J=0 TO 3000/MAXX :NEXT J:BEEP
  493. 14920   NEXT X
  494. 14930 NEXT Y
  495. 14940 RETURN
  496. 14950 '
  497. 14960 *MODE1   'SHUFFLE
  498. 14970    FOR I=1 TO MAXX*MAXY  'シャッフル
  499. 14980      X=INT(RND*MAXX)+1: XX=INT(RND*MAXX)+1
  500. 14990      Y=INT(RND*MAXY)+1: YY=INT(RND*MAXY)+1
  501. 15000       SETX=BXY*X+TX: SETY=BXY*Y+TY :OFSET=BYTE2*BOX(XX,YY)
  502. 15010       PUT@A(SETX,SETY)-(SETX+BXY-1,SETY+BXY-1),GETIMAGE,PSET,,,,OFSET
  503. 15020       SETX=BXY*XX+TX:SETY=BXY*YY+TY :OFSET=BYTE2*BOX(X,Y)
  504. 15030       PUT@A(SETX,SETY)-(SETX+BXY-1,SETY+BXY-1),GETIMAGE,PSET,,,,OFSET
  505. 15040      SWAP BOX(X,Y),BOX(XX,YY)
  506. 15050      IF BOX(X,Y)=0 THEN NOWX=X:NOWY=Y:NEXTX=X:NEXTY=Y:TMPX=X:TMPY=Y
  507. 15060      IF BOX(XX,YY)=0 THEN NOWX=XX:NOWY=YY:NEXTX=XX:NEXTY=YY:TMPX=XX:TMPY=YY
  508. 15070      IF BOX(X,Y)<>BOX(XX,YY) THEN FOR J=1 TO 3000/MAXX:NEXT J:BEEP
  509. 15080    NEXT I
  510. 15090 RETURN
  511. 15100 '
  512. 15110 *SHOWSTEPS  'MODE=0
  513. 15120    TMP=ABS(TMPX-NOWX)+ABS(TMPY-NOWY)
  514. 15130    LEFTSTEPS=LEFTSTEPS-TMP
  515. 15140    IF LEFTSTEPS<0 THEN LEFTSTEPS=0
  516. 15150    COLOR 2:LOCATE 68,13 :PRINT USING "####";LEFTSTEPS
  517. 15160    COLOR 7
  518. 15170    'IF LV<>0 AND LEFTSTEPS<=0 THEN GAME=FALSE:GOSUB *STEPSOVER
  519. 15180  RETURN
  520. 15190 '
  521. 15200 *SHOWTIMES  'MODE=1
  522. 15210   LEFTTIME=LEFTTIME-1
  523. 15220   IF LEFTTIME<0 THEN LEFTTIME=0
  524. 15230   MTIME$=TIME$
  525. 15240    COLOR 2:LOCATE 68,13 :PRINT USING "####";LEFTTIME
  526. 15250    COLOR 7
  527. 15260    IF LEFTTIME<=5 THEN BEEP
  528. 15270    IF LEFTTIME<=0 THEN GOSUB *TIMEUP
  529. 15280    'IF LEFTTIME<=0 THEN GAME=FALSE:GOSUB *TIMEUP
  530. 15290 RETURN
  531. 15300 '
  532. 15310 *MOVECHECKKEY
  533. 15320   IF XX=1 AND NOWX>1 THEN NEXTX=NOWX-1    :GOSUB *MOVING
  534. 15330   IF XX=-1 AND NOWX<MAXX THEN NEXTX=NOWX+1:GOSUB *MOVING
  535. 15340   IF YY=1 AND NOWY>1 THEN NEXTY=NOWY-1    :GOSUB *MOVING
  536. 15350   IF YY=-1 AND NOWY<MAXY THEN NEXTY=NOWY+1:GOSUB *MOVING
  537. 15360  ' LOCATE 5,6:PRINT USING "NextX=## NextY=##";NEXTX;NEXTY
  538. 15370 RETURN
  539. 15380 '
  540. 15390 *MOVECHECKMOUSE
  541. 15400   IF RET THEN NEXTX=TMPX : NEXTY=TMPY :GOSUB *MOVING :RETURN
  542. 15410   IF MX<1 OR MAXX<MX THEN RETURN
  543. 15420   IF MY<1 OR MAXY<MY THEN RETURN
  544. 15430   IF MX=NOWX AND MY=NOWY THEN RETURN
  545. 15440   IF MX<>NOWX AND MY<>NOWY THEN RETURN
  546. 15450   NEXTX=MX : NEXTY=MY
  547. 15460   XX=NOWX-NEXTX :YY=NOWY-NEXTY :TMP=ST
  548. 15470   'IF RET THEN NEXTX=TMPX : NEXTY=TMPY :GOSUB *MOVING
  549. 15480   IF MX=NOWX THEN MY=NEXTY: GOSUB *MOVING :RETURN
  550. 15490   IF MY=NOWY THEN MX=NEXTX: GOSUB *MOVING
  551. 15500  RETURN
  552. 15510 '
  553. 15520 *CLEARCHECK
  554. 15530   IF NOWX<>CX OR NOWY<>CY THEN RETURN
  555. 15540   MENCLEAR=TRUE
  556. 15550   X=1:Y=1
  557. 15560   WHILE MENCLEAR AND Y<=MAXY
  558. 15570     IF BOX(X,Y)<>CBOX(X,Y) THEN MENCLEAR=FALSE
  559. 15580     X=X+1
  560. 15590     IF X>MAXX THEN Y=Y+1:X=1
  561. 15600   WEND
  562. 15610   IF NOT MENCLEAR THEN RETURN
  563. 15620   GOSUB *MENCLEAR
  564. 15630   IF MEN=LASTMEN THEN GOSUB *ALLCLEAR1:RETURN *TITLE
  565. 15640   MEN=MEN+1
  566. 15650  RETURN *MAIN
  567. 15660 '
  568. 15670 *MOVING
  569. 15680  IF MUS THEN MOUSE 1,,,0
  570. 15690  ' LOCATE 35,5:PRINT USING "XX=## YY=##";XX;YY
  571. 15700  ' LOCATE 48,5
  572. 15710  ' IF XX>0 THEN PRINT "→" ELSE IF XX<0 THEN PRINT "←"
  573. 15720  ' IF YY>0 THEN PRINT "↓" ELSE IF YY<0 THEN PRINT "↑"
  574. 15730    TMPY=NOWY : TMPX=NOWX
  575. 15740    IF NEXTY=NOWY AND NOWX<NEXTX THEN GOSUB *MOVING1:'PRINT "→"
  576. 15750    IF NEXTY=NOWY AND NOWX>NEXTX THEN GOSUB *MOVING2:'PRINT "←"
  577. 15760    IF NEXTX=NOWX AND NOWY<NEXTY THEN GOSUB *MOVING3:'PRINT "↓"
  578. 15770    IF NEXTX=NOWX AND NOWY>NEXTY THEN GOSUB *MOVING4:'PRINT "↑"
  579. 15780    BOX(NEXTX,NEXTY)=0
  580. 15790    NOWX=NEXTX : NOWY=NEXTY
  581. 15800    IF MODE=0 THEN GOSUB *SHOWSTEPS
  582. 15810   IF MUS THEN MOUSE 1,,,1
  583. 15820 RETURN
  584. 15830 '
  585. 15840 *MOVING1
  586. 15850    FOR I=BXY-ST TO 0 STEP -ST
  587. 15860      SETY=TY+BXY*NEXTY
  588. 15870      FOR J=NEXTX TO NOWX+1 STEP -1
  589. 15880       SETX = TX + BXY * (J-1) + I
  590. 15890       OFSET = BYTE2 * BOX(J,NEXTY)
  591. 15900       PUT@A(SETX,SETY)-(SETX+BXY-1,SETY+BXY-1),GETIMAGE,PSET,,,,OFSET
  592. 15910      NEXT J
  593. 15920      SETX=TX+BXY*NEXTX+I
  594. 15930      FOR K=ST -1 TO 0 STEP -1
  595. 15940       LINE(SETX+K,SETY)-(SETX+K,SETY+BXY-1),PSET,%0
  596. 15950      NEXT K
  597. 15960    NEXT I
  598. 15970    FOR I=NOWX TO NEXTX -1
  599. 15980      BOX(I,NEXTY)=BOX(I+1,NEXTY)
  600. 15990    NEXT I
  601. 16000 RETURN
  602. 16010 '
  603. 16020 *MOVING2
  604. 16030    FOR I=ST TO BXY STEP ST
  605. 16040      SETY=TY+BXY*NEXTY
  606. 16050      FOR J=NEXTX TO NOWX -1 STEP 1
  607. 16060       SETX=TX+BXY*J+I
  608. 16070       OFSET=BYTE2*BOX(J,NEXTY)
  609. 16080       PUT@A(SETX,SETY)-(SETX+BXY-1,SETY+BXY-1),GETIMAGE,PSET,,,,OFSET
  610. 16090      NEXT J
  611. 16100      SETX=TX+BXY*NEXTX+I-ST
  612. 16110      FOR K=0 TO ST-1 STEP 1
  613. 16120       LINE(SETX+K,SETY)-(SETX+K,SETY+BXY-1),PSET,%0
  614. 16130      NEXT K
  615. 16140    NEXT I
  616. 16150    FOR I=NOWX TO NEXTX+1 STEP -1
  617. 16160      BOX(I,NEXTY)=BOX(I-1,NEXTY)
  618. 16170    NEXT I
  619. 16180 RETURN
  620. 16190 '
  621. 16200 *MOVING3
  622. 16210    FOR I=BXY-ST TO 0 STEP -ST
  623. 16220      SETX=TX+BXY*NEXTX
  624. 16230      FOR J=NEXTY TO NOWY+1 STEP -1
  625. 16240       SETY = TY + BXY* (J-1) + I
  626. 16250       OFSET = BYTE2 * BOX(NEXTX,J)
  627. 16260       PUT@A(SETX,SETY)-(SETX+BXY-1,SETY+BXY-1),GETIMAGE,PSET,,,,OFSET
  628. 16270      NEXT J
  629. 16280      SETY=TY+BXY*NEXTY+I
  630. 16290      FOR K=ST -1 TO 0 STEP -1
  631. 16300       LINE(SETX,SETY+K)-(SETX+BXY-1,SETY+K),PSET,%0
  632. 16310      NEXT K
  633. 16320    NEXT I
  634. 16330    FOR I=NOWY TO NEXTY -1
  635. 16340      BOX(NEXTX,I)=BOX(NEXTX,I+1)
  636. 16350    NEXT I
  637. 16360 RETURN
  638. 16370 '
  639. 16380 *MOVING4
  640. 16390    FOR I=ST TO BXY STEP ST
  641. 16400      SETX=TX+BXY*NEXTX
  642. 16410      FOR J=NEXTY TO NOWY-1 STEP 1
  643. 16420       SETY=TY+BXY*J+I
  644. 16430       OFSET=BYTE2*BOX(NEXTX,J)
  645. 16440       PUT@A(SETX,SETY)-(SETX+BXY-1,SETY+BXY-1),GETIMAGE,PSET,,,,OFSET
  646. 16450      NEXT J
  647. 16460      SETY=TY+BXY*NEXTY+I-ST
  648. 16470      FOR K=0 TO ST-1 STEP 1
  649. 16480       LINE(SETX,SETY+K)-(SETX+BXY-1,SETY+K),PSET,%0
  650. 16490      NEXT K
  651. 16500    NEXT I
  652. 16510    FOR I=NOWY TO NEXTY+1 STEP -1
  653. 16520      BOX(NEXTX,I)=BOX(NEXTX,I-1)
  654. 16530    NEXT I
  655. 16540 RETURN
  656. 16550 '
  657. 16560 '*STEPSOVER
  658. 16570 '  SYMBOL (0,100),"STEPS OVER!",7,10,%10,,,4
  659. 16580 ' RETURN *GAMEOVER
  660. 16590 '
  661. 16600 *TIMEUP
  662. 16610   SYMBOL (0,100),"TIME OVER!",7,10,%10,,,4
  663. 16620  RETURN *GAMEOVER
  664. 16630 '
  665. 16640 *GAMEOVER
  666. 16650   IF MUS THEN
  667. 16660     LOCATE 5,19:PRINT "コンティニューする時は、";
  668. 16670                 PRINT "マウスの左ボタンを押してください。"
  669. 16680     LOCATE 5,21:PRINT "タイトルに戻る時は、";
  670. 16690                 PRINT "マウスの右ボタンを押してください。"
  671. 16700     LOCATE 5,23:PRINT "ゲーム自体を止める時は、";
  672. 16710                 PRINT "ESCキーを押してください。"
  673. 16720     Q$="" : M=TRUE
  674. 16730     WHILE Q$="" AND M
  675. 16740       IF MOUSE(2,0) OR MOUSE(2,1) THEN M=FALSE
  676. 16750       Q$=INKEY$
  677. 16760     WEND
  678. 16770     IF Q$<>"" THEN
  679. 16780       IF ASC(Q$)=27 THEN END ELSE GOTO *GAMEOVER
  680. 16790     ENDIF
  681. 16800     IF MOUSE(2,0)=TRUE THEN
  682. 16810       GOSUB *GOMAIN
  683. 16820     ELSE IF MOUSE(2,1)=TRUE THEN
  684. 16830       GOSUB *GOTITLE
  685. 16840     ENDIF
  686. 16850     '
  687. 16860   ELSE IF NOT MUS THEN
  688. 16870     LOCATE 5,19:PRINT "コンティニューする時は、";
  689. 16880                 PRINT "Yキーまたは、RETURNキーを押してください。"
  690. 16890     LOCATE 5,21:PRINT "タイトルに戻る時は、";
  691. 16900                 PRINT "Nキーまたは、SPACEキーを押してください。"
  692. 16910     LOCATE 5,23:PRINT "ゲーム自体を止める時は、";
  693. 16920                 PRINT "ESCキーを押してください。"
  694. 16930     Q$=""
  695. 16940     WHILE Q$=""
  696. 16950       Q$=INKEY$
  697. 16960     WEND
  698. 16970     IF Q$="Y" OR Q$="y" OR ASC(Q$)=13 THEN
  699. 16980       GOSUB *GOMAIN
  700. 16990     ELSE IF Q$="N" OR Q$="n" OR Q$=" " THEN
  701. 17000       GOSUB *GOTITLE
  702. 17010     ELSE IF ASC(Q$)=27 THEN
  703. 17020       END
  704. 17030     ENDIF
  705. 17040   ENDIF
  706. 17050 '
  707. 17060 *GOMAIN
  708. 17070   SC&=0
  709. 17080   GOSUB *FADE_IN
  710. 17090   CLS
  711. 17100 RETURN *MAIN
  712. 17110 '
  713. 17120 *GOTITLE
  714. 17130   GOSUB *FADE_IN
  715. 17140   CLS
  716. 17150  RETURN *TITLE
  717. 17160 '
  718. 17170 *MENCLEAR
  719. 17180   IF MUS THEN MOUSE 1,,0
  720. 17190   WAIT 50
  721. 17200   LINE(220,180)-(330,300),PSET,%8,BF
  722. 17210   LINE(200,160)-(310,280),PSET,%7,BF
  723. 17220   Q$="STAGE "+STR$(MEN)
  724. 17230   SYMBOL (226,164),Q$,1,2,%12,,,1
  725. 17240   SYMBOL (226,204)," Clear!",1,2,%12,,,1
  726. 17250   SYMBOL (226,244),"-score-",1,1,%14,,,1
  727. 17260   IF MODE=0 THEN J=LEFTSTEPS ELSE J=LEFTTIME
  728. 17270   TMP=5
  729. 17280   FOR I=1 TO 5
  730. 17290     IF SC&=>10^I THEN TMP=5-I
  731. 17300   NEXT I
  732. 17310   Q$=STRING$(TMP," ")+STR$(J*(LV+1)*10)
  733. 17320   SYMBOL (226,264),Q$,1,1,%14,,,1
  734. 17330   WAIT 80
  735. 17340   K=J
  736. 17350   IF J>0 THEN
  737. 17360   FOR I=1 TO J
  738. 17370     K=K-1:BEEP
  739. 17380     SC&=SC&+(LV+1)*10
  740. 17390     IF HS&(MODE,LV)<SC& THEN HS&(MODE,LV)=SC&
  741. 17400     LOCATE 68,13 :COLOR 2 :PRINT USING "####";K
  742. 17410     LOCATE 72,9  :COLOR 4 :PRINT USING "#######";HS&(MODE,LV)
  743. 17420     LOCATE 72,11 :COLOR 6 :PRINT USING "#######";SC&
  744. 17430     WAIT 3
  745. 17440   NEXT I
  746. 17450   ENDIF
  747. 17460   IF NOT MEN=LASTMEN THEN COLOR 7:GOSUB *FADE_IN:IF MUS THEN MOUSE 1,,1
  748. 17470   RETURN
  749. 17480 '
  750. 17490 *ALLCLEAR1
  751. 17500   CLS 1 'TXT
  752. 17510   IF MUS THEN MOUSE 1,,0
  753. 17520   FOR I=1 TO 10
  754. 17530     LINE(320-32*I,240-24*I)-(320+32*I,240+24*I),PSET,%15,BF
  755. 17540     WAIT 5
  756. 17550   NEXT I
  757. 17560   FOR I=1 TO 10
  758. 17570     LINE(320-32*I,240-24*I)-(320+32*I,240+24*I),PSET,%0,BF
  759. 17580     WAIT 5
  760. 17590   NEXT I
  761. 17600   FOR I=1 TO 10
  762. 17610     LINE(320-32*I,240-24*I)-(320+32*I,240+24*I),PSET,%15,BF
  763. 17620     WAIT 5
  764. 17630   NEXT I
  765. 17640   FOR I=1 TO 6
  766. 17650     LINE(320-32*I,240-4*I)-(320+32*I,240+4*I),PSET,%0,BF
  767. 17660     WAIT 5
  768. 17670   NEXT I
  769. 17680   RESTORE *ALLCLEAR1
  770. 17690   FOR I=1 TO 8 
  771. 17700    READ M$,C
  772. 17710    SYMBOL (I*60,60),M$,5,10,%C,,,7
  773. 17720   NEXT I
  774. 17730   DATA "S",10,"l",14,"i",12,"d",13,"e",9,"B",11,"o",10,"x",14
  775. 17740   IF LV=0 THEN
  776. 17750    M$=" Easy "
  777. 17760   ELSE IF LV=1 THEN
  778. 17770    M$="Normal"
  779. 17780   ELSE IF LV=2 THEN
  780. 17790    M$=" Hard "
  781. 17800   ENDIF
  782. 17810   SYMBOL (80,320),M$,5,5,%9,,,5
  783. 17820   Q$=" Hi  Score :"+STR$(HS&(MODE,LV))
  784. 17830   SYMBOL (250,280),Q$,1,1,%12,,,5
  785. 17840   Q$="Your Score :"+STR$(SC&)
  786. 17850   SYMBOL (250,300),Q$,1,1,%14,,,5
  787. 17860   TMP=TRUE:Q$="":COLOR ,,,4
  788. 17870   WHILE TMP
  789. 17880     COLOR INT(RND*7+1)
  790. 17890     LOCATE 24,12:PRINT "Congratulations!"
  791. 17900     IF MUS THEN
  792. 17910       IF MOUSE(2,0) OR MOUSE(2,1) THEN TMP=FALSE
  793. 17920     ELSE
  794. 17930       Q$=INKEY$:IF Q$<>"" THEN TMP=FALSE
  795. 17940     ENDIF
  796. 17950   WEND
  797. 17960  RETURN
  798. 17970 '
  799. 17980 *FADE_IN
  800. 17990   FOR I=15 TO 0 STEP -1
  801. 18000     FOR J=1 TO 15
  802. 18010     PALETTE J,[G(J)*I/15,R(J)*I/15,B(J)*I/15]
  803. 18020     NEXT J
  804. 18030     WAIT 10
  805. 18040   NEXT I
  806. 18050  RETURN
  807. 18060 '
  808. 18070 *FADE_OUT
  809. 18080   FOR I=0 TO 15
  810. 18090     FOR J=1 TO 15
  811. 18100     PALETTE J,[G(J)*I/15,R(J)*I/15,B(J)*I/15]
  812. 18110     NEXT J
  813. 18120     WAIT 8
  814. 18130   NEXT I
  815. 18140  RETURN
  816. 18150 '
  817. 18160 *CHECKPROGRAM
  818. 18170    LOCATE 0,6+Y
  819. 18180    FOR X=1 TO 12 :PRINT USING "&&";HEX$(BOX(X,Y));:NEXT X
  820. 18190 RETURN
  821. 18200 '
  822. 18210 *HITKEY
  823. 18220   IF (NOT MUS) AND ASC(Q$)=13 THEN MOVE=-MOVE:GOSUB *WAY
  824. 18230   IF ASC(Q$)=27 THEN RETURN *TITLE 'END
  825. 18240 RETURN
  826. 18250 '
  827. 18260 *WAY
  828. 18270   IF MOVE=1 THEN
  829. 18280     LOCATE 71,20:PRINT " ↑ "
  830. 18290     LOCATE 71,21:PRINT "← →"
  831. 18300     LOCATE 71,22:PRINT " ↓ "
  832. 18310   ELSE IF MOVE=-1 THEN
  833. 18320     LOCATE 71,20:PRINT " ↓ "
  834. 18330     LOCATE 71,21:PRINT "→ ←"
  835. 18340     LOCATE 71,22:PRINT " ↑ "
  836. 18350   ENDIF
  837. 18360     LOCATE 70,19:PRINT "キー操作"
  838. 18370     LOCATE 68,23:PRINT "return=変更"
  839. 18380  RETURN
  840. 18390 '
  841. 18400 '********************汎用サブルーチン*************************
  842. 18410 *INKEYWAIT
  843. 18420    Q$=INPUT$(1)
  844. 18430    'WHILE Q$="":Q$=INKEY$:WEND
  845. 18440 RETURN
  846. 18450 '
  847. 18460 *INKEYXY
  848. 18470    XX=0:YY=0
  849. 18480    IF Q$="2" OR ASC(Q$)=31 THEN YY=1
  850. 18490    IF Q$="4" OR ASC(Q$)=29 THEN XX=-1
  851. 18500    IF Q$="6" OR ASC(Q$)=28 THEN XX=1
  852. 18510    IF Q$="8" OR ASC(Q$)=30 THEN YY=-1
  853. 18520    XX=XX*MOVE : YY=YY*MOVE
  854. 18530 RETURN
  855. 18540 '
  856. 18550 *CLEARINKEY
  857. 18560    WHILE INKEY$<>"" AND PAD(1)=0 :WEND
  858. 18570 RETURN 
  859. 18580 '
  860. 18590 *CLICKWAIT
  861. 18600    Q$="" : M=TRUE : RET=FALSE
  862. 18610    WHILE Q$="" AND M
  863. 18620      Q$=INKEY$
  864. 18630      M=(MOUSE(2,0)=0 AND MOUSE(2,1)=0)
  865. 18640      MX=(MOUSE(0)-TX-BXY/2)/BXY: MY=(MOUSE(1)-TY-BXY/2)/BXY
  866. 18650      'LOCATE 5,2:PRINT USING "Mcol=###";(MOUSE(0)-BXY/2)/BXY
  867. 18660      'LOCATE 5,6:PRINT USING "MX=##### MY=#####";MX;MY
  868. 18670      IF MODE=1 AND MTIME$<>TIME$ THEN GOSUB *SHOWTIMES
  869. 18680    WEND
  870. 18690    IF Q$<>"" THEN RETURN
  871. 18700    M=TRUE :IF MOUSE(2,1)=-1 THEN RET=TRUE 'Right Click
  872. 18710    IF MODE THEN RETURN
  873. 18720    WHILE M
  874. 18730      M=(MOUSE(2,0)=-1 OR MOUSE(2,1)=-1)
  875. 18740      MX=(MOUSE(0)-TX-BXY/2)/BXY: MY=(MOUSE(1)-TY-BXY/2)/BXY
  876. 18750      'LOCATE 5,2:PRINT USING "Mcol=###";(MOUSE(0)-BXY/2)/BXY
  877. 18760      'LOCATE 5,6:PRINT USING "MX=##### MY=#####";MX;MY
  878. 18770      IF MODE=1 AND MTIME$<>TIME$ THEN GOSUB *SHOWTIMES
  879. 18780    WEND
  880. 18790 RETURN
  881. 18800 '
  882. 18810 *WAITMOUSEOFF
  883. 18820    WHILE (MOUSE(2,0) OR MOUSE(2,1)):WEND
  884. 18830 RETURN
  885. 18840 '
  886. 18850 *CLICKXY
  887. 18860   Q$="":M=TRUE:COLOR 7
  888. 18870   WHILE Q$="" AND M
  889. 18880     Q$=INKEY$
  890. 18890     M=(MOUSE(2,0)=0 AND MOUSE(2,1)=0)
  891. 18900     'LOCATE 5,2 :PRINT USING "MX=### MY=###";MOUSE(0);MOUSE(1)
  892. 18910   WEND
  893. 18920   IF Q$<>"" THEN RETURN
  894. 18930   GOSUB *WAITMOUSEOFF
  895. 18940   MX=MOUSE(0):MY=MOUSE(1)
  896. 18950 RETURN
  897.